perm filename FNTSAI.SAI[VIS,HPM]7 blob
sn#303647 filedate 1977-09-04 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00003 00002 ENTRY FNTSEL,CHRDEP,CHRPED,FCACHE,CHRWID,CHR3X2,CHR3Y4,CHR6X4,CHR1X1
C00005 00003 OWN SAFE INTEGER ARRAY FNTAR[0:'17]
C00008 00004 INTERNAL PROCEDURE CHRDEP(INTEGER FNTNUM, CHR REFERENCE INTEGER PIC
C00014 00005 INTERNAL PROCEDURE CHR3X2(INTEGER FNTNUM, CHR REFERENCE INTEGER PIC
C00017 00006 INTERNAL PROCEDURE CHR1X1(INTEGER FNTNUM, CHR REFERENCE INTEGER PIC
C00020 00007 INTERNAL PROCEDURE CHR6X4(INTEGER FNTNUM, CHR REFERENCE INTEGER PIC
C00024 00008 INTERNAL PROCEDURE CHR3Y4(INTEGER FNTNUM, CHR REFERENCE INTEGER PIC
C00028 00009 INTERNAL PROCEDURE CHRPED(INTEGER FNTNUM, CHR REFERENCE INTEGER PIC
C00034 00010 END "FNTSAI"
C00040 ENDMK
C⊗;
ENTRY FNTSEL,CHRDEP,CHRPED,FCACHE,CHRWID,CHR3X2,CHR3Y4,CHR6X4,CHR1X1;
BEGIN "FNTSAI"
REQUIRE "FILHDR.SAI[VIS,HPM]" SOURCE_FILE;
DEFINE PCLN=0; comment index of word in a picture file containing
number of scanlines in the picture;
DEFINE PCWD=1; comment number of words in the picture;
DEFINE PCBY=2; comment number of valid bytes in the picture;
DEFINE PCBYA=3; comment no. of bytes including the nulls at the end of lines;
DEFINE LNWD=4; comment no. of words per scanline;
DEFINE LNBY=5; comment no. of valid bytes per scanline;
DEFINE LNBYA=6; comment no. of bytes per scanline, including the nulls;
DEFINE WDBY=7; comment no. of bytes per word;
DEFINE WDBI=8; comment no. of bits containing data in a word;
DEFINE BYBI=9; comment no. of bits per byte;
DEFINE BMAX=10; comment maximum value of a byte;
DEFINE BPTAB=11; comment address of second entry in byte pntr. table;
DEFINE LINTAB=12; comment actual address of the first entry in the row table;
OWN SAFE INTEGER ARRAY FNTAR[0:'17];
OWN SAFE STRING ARRAY FNTNAM[0:'17];
OWN STRING FILNM;
PRELOAD_WITH 0,0,0,0;
OWN SAFE INTEGER ARRAY CBUF[0:3];
PRELOAD_WITH -1,-1;
OWN SAFE INTEGER ARRAY CHO[1:2];
EXTERNAL PROCEDURE ADDEL(REFERENCE INTEGER PIC; INTEGER I,J,VAL);
DEFINE FNTHIG='201;
DEFINE FNTBAS='203;
INTERNAL INTEGER PROCEDURE FNTSEL(INTEGER FNTNUM; STRING FILSPEC;
REFERENCE INTEGER FNTHEAD);
BEGIN "FNTSEL"
INTEGER ICHAN,FOO,IFLAG;
PRSFIL(FILSPEC);
FNTNAM[FNTNUM]←DEVPRS&":"&FILPRS;
IF CHO[2]≠-1 THEN RELEASE(CHO[2]);
CHO[2]←-1;
CHO[1]←-1;
FNTAR[FNTNUM]←LOCATION(FNTHEAD);
ICHAN←GETCHAN;
IFLAG←TRUE;
OPEN(ICHAN,DEVPRS,'10,19,0,FOO,FOO,IFLAG);
LOOKUP(ICHAN,FILPRS,IFLAG);
IF IFLAG THEN BEGIN RELEASE(ICHAN); RETURN(-1); END;
ARRYIN(ICHAN,MEMORY[LOCATION(FNTHEAD)+0],'204);
RELEASE(ICHAN);
RETURN(MEMORY[LOCATION(FNTHEAD)+'201]); comment return height of font;
END "FNTSEL";
INTERNAL INTEGER PROCEDURE CHRWID(INTEGER FNTNUM, CHR);
BEGIN
INTEGER ICHAN,FOO,POS,I,J,RASW;
POS←MEMORY[FNTAR[FNTNUM]+CHR] LAND '777777;
POS←(POS LSH 18) ASH -18;
IF POS>0 THEN
BEGIN "READA"
IF CHO[1]≠FNTNUM THEN
BEGIN
IF CHO[2]≠-1 THEN RELEASE(CHO[2]);
PRSFIL(FNTNAM[FNTNUM]);
CHO[2]←GETCHAN;
FOO←1;
OPEN(CHO[2],DEVPRS,'10,19,0,FOO,FOO,FOO);
LOOKUP(CHO[2],FILPRS,FOO);
CHO[1]←FNTNUM;
END;
USETI(CHO[2],POS%128 + 1);
FOR I←1 STEP 1 UNTIL (POS MOD 128) DO WORDIN(CHO[2]);
RASW←WORDIN(CHO[2]) LSH -27;
END "READA"
ELSE
BEGIN "BUFA"
POS←-POS;
RASW←MEMORY[POS] LSH -27;
END "BUFA";
IF RASW=0 THEN RASW←MEMORY[FNTAR[FNTNUM]+CHR] LSH -18;
RETURN(RASW);
END;
INTERNAL PROCEDURE FCACHE(REFERENCE INTEGER CHE; INTEGER BFSZ);
BEGIN
CBUF[2]←CBUF[0]←LOCATION(CHE);
CBUF[3]←CBUF[1]←BFSZ;
END;
INTERNAL PROCEDURE CHRDEP(INTEGER FNTNUM, CHR; REFERENCE INTEGER PIC;
INTEGER YLO,XLO, YCOMP(1),XCOMP(1));
BEGIN "CHRDEP"
INTEGER ICHAN,FOO,POS,I,J,RASW;
YLO←YLO-MEMORY[FNTAR[FNTNUM]+FNTBAS];
IF (MEMORY[FNTAR[FNTNUM]+CHR]) LAND '777777≠0 ∧
YLO+MEMORY[FNTAR[FNTNUM]+FNTHIG]≥0 ∧ YLO≤MEMORY[LOCATION(PIC)+PCLN]*YCOMP THEN
BEGIN "REAL"
POS←MEMORY[FNTAR[FNTNUM]+CHR] LAND '777777;
POS←(POS LSH 18) ASH -18;
IF POS>0 THEN
BEGIN "READA"
IF CHO[1]≠FNTNUM THEN
BEGIN
IF CHO[2]≠-1 THEN RELEASE(CHO[2]);
PRSFIL(FNTNAM[FNTNUM]);
CHO[2]←GETCHAN;
FOO←1;
OPEN(CHO[2],DEVPRS,'10,19,0,FOO,FOO,FOO);
LOOKUP(CHO[2],FILPRS,FOO);
CHO[1]←FNTNUM;
END;
USETI(CHO[2],POS%128 + 1);
FOR I←1 STEP 1 UNTIL (POS MOD 128) DO WORDIN(CHO[2]);
RASW←WORDIN(CHO[2]);
IF (RASW LSH -27)=0 THEN
RASW←RASW LOR ((MEMORY[FNTAR[FNTNUM]+CHR] LSH -18) LSH 27);
BEGIN "READ"
INTEGER NROW,PTQ;
INTEGER ARRAY CHAR[0:(RASW LAND '777777)-2];
ARRYIN(CHO[2],CHAR[0],(RASW LAND '777777)-1);
IF CBUF[1]≥2*(RASW LAND '777777) THEN
BEGIN
MEMORY[CBUF[0]]←RASW;
ARRBLT(MEMORY[CBUF[0]+1],CHAR[0],(RASW LAND '777777)-1);
MEMORY[FNTAR[FNTNUM]+CHR]←
(MEMORY[FNTAR[FNTNUM]+CHR] LAND '777777000000) LOR
((-CBUF[0]) LAND '777777);
CBUF[0]←CBUF[0]+(RASW LAND '777777);
CBUF[1]←CBUF[1]-(RASW LAND '777777);
END
ELSE
OUTSTR("!");
RASW←RASW LSH -27;
IF RASW=0 THEN RASW←MEMORY[FNTAR[FNTNUM]+CHR] LSH -18;
XLO←XLO-(CHAR[0] ASH -27);
YLO←YLO+((CHAR[0] LSH 9) LSH -27);
NROW←CHAR[0] LAND '777777;
IF NROW*RASW>0 THEN PTQ←POINT(1,CHAR[1],-1);
FOR I←0 STEP 1 UNTIL NROW-1 DO
BEGIN "PACK"
INTEGER YPA;
YPA←(YLO+I)%YCOMP;
FOR J←0 STEP 1 UNTIL RASW-1 DO IF ILDB(PTQ) THEN
ADDEL(PIC,YPA,(XLO+J)%XCOMP,1);
IF (PTQ LSH -30) < RASW THEN PTQ←PTQ LAND '7777777777;
END "PACK";
END "READ";
END "READA"
ELSE
BEGIN "BUFA"
POS←-POS;
RASW←MEMORY[POS];
BEGIN "READ"
INTEGER NROW,PTQ;
RASW←RASW LSH -27;
IF RASW=0 THEN RASW←MEMORY[FNTAR[FNTNUM]+CHR] LSH -18;
XLO←XLO-(MEMORY[POS+1] ASH -27);
YLO←YLO+((MEMORY[POS+1] LSH 9) LSH -27);
NROW←MEMORY[POS+1] LAND '777777;
IF NROW*RASW>0 THEN PTQ←POINT(1,MEMORY[POS+2],-1);
FOR I←0 STEP 1 UNTIL NROW-1 DO
BEGIN "PACK"
INTEGER YPA;
YPA←(YLO+I)%YCOMP;
FOR J←0 STEP 1 UNTIL RASW-1 DO IF ILDB(PTQ) THEN
ADDEL(PIC,YPA,(XLO+J)%XCOMP,1);
IF (PTQ LSH -30) < RASW THEN PTQ←PTQ LAND '7777777777;
END "PACK";
END "READ";
END "BUFA";
END "REAL";
END "CHRDEP";
INTERNAL PROCEDURE CHR3X2(INTEGER FNTNUM, CHR; REFERENCE INTEGER PIC;
INTEGER YLO,XLO);
BEGIN "CHR3X2"
EXTERNAL PROCEDURE L3X2(REFERENCE INTEGER PIC; INTEGER YLO,XLO;
REFERENCE INTEGER CHAR);
INTEGER ICHAN,FOO,POS,I,J,RASW;
YLO←YLO-MEMORY[FNTAR[FNTNUM]+FNTBAS];
IF (MEMORY[FNTAR[FNTNUM]+CHR]) LAND '777777≠0 ∧
YLO≥0 ∧ YLO<MEMORY[LOCATION(PIC)+PCLN]*2 THEN
BEGIN "REAL"
POS←MEMORY[FNTAR[FNTNUM]+CHR] LAND '777777;
POS←(POS LSH 18) ASH -18;
IF POS>0 THEN
BEGIN "READA"
IF CHO[1]≠FNTNUM THEN
BEGIN
IF CHO[2]≠-1 THEN RELEASE(CHO[2]);
PRSFIL(FNTNAM[FNTNUM]);
CHO[2]←GETCHAN;
FOO←1;
OPEN(CHO[2],DEVPRS,'10,19,0,FOO,FOO,FOO);
LOOKUP(CHO[2],FILPRS,FOO);
CHO[1]←FNTNUM;
END;
USETI(CHO[2],POS%128 + 1);
FOR I←(POS MOD 128) STEP -1 UNTIL 1 DO WORDIN(CHO[2]);
RASW←WORDIN(CHO[2]);
IF (RASW LSH -27)=0 THEN
RASW←RASW LOR ((MEMORY[FNTAR[FNTNUM]+CHR] LSH -18) LSH 27);
BEGIN "READ"
SAFE INTEGER ARRAY CHAR[-1:(RASW LAND '777777)-2];
CHAR[-1]←RASW;
ARRYIN(CHO[2],CHAR[0],(RASW LAND '777777)-1);
IF CBUF[1]≥2*(RASW LAND '777777) THEN
BEGIN
MEMORY[CBUF[0]]←RASW;
ARRBLT(MEMORY[CBUF[0]+1],CHAR[0],(RASW LAND '777777)-1);
MEMORY[FNTAR[FNTNUM]+CHR]←
(MEMORY[FNTAR[FNTNUM]+CHR] LAND '777777000000) LOR
((-CBUF[0]) LAND '777777);
CBUF[0]←CBUF[0]+(RASW LAND '777777);
CBUF[1]←CBUF[1]-(RASW LAND '777777);
END
ELSE
OUTSTR("!");
L3X2(PIC,
YLO+((CHAR[0] LSH 9) LSH -27),XLO-(CHAR[0] ASH -27),
CHAR[-1]);
END "READ";
END "READA"
ELSE
L3X2(PIC,
YLO+((MEMORY[1-POS] LSH 9) LSH -27),XLO-(MEMORY[1-POS] ASH -27),
MEMORY[-POS]);
END "REAL";
END "CHR3X2";
INTERNAL PROCEDURE CHR1X1(INTEGER FNTNUM, CHR; REFERENCE INTEGER PIC;
INTEGER YLO,XLO);
BEGIN "CHR1X1"
EXTERNAL PROCEDURE L1X1(REFERENCE INTEGER PIC; INTEGER YLO,XLO;
REFERENCE INTEGER CHAR);
INTEGER ICHAN,FOO,POS,I,J,RASW;
YLO←YLO-MEMORY[FNTAR[FNTNUM]+FNTBAS];
IF (MEMORY[FNTAR[FNTNUM]+CHR]) LAND '777777≠0 ∧
YLO≥0 ∧ YLO<MEMORY[LOCATION(PIC)+PCLN] THEN
BEGIN "REAL"
POS←MEMORY[FNTAR[FNTNUM]+CHR] LAND '777777;
POS←(POS LSH 18) ASH -18;
IF POS>0 THEN
BEGIN "READA"
IF CHO[1]≠FNTNUM THEN
BEGIN
IF CHO[2]≠-1 THEN RELEASE(CHO[2]);
PRSFIL(FNTNAM[FNTNUM]);
CHO[2]←GETCHAN;
FOO←1;
OPEN(CHO[2],DEVPRS,'10,19,0,FOO,FOO,FOO);
LOOKUP(CHO[2],FILPRS,FOO);
CHO[1]←FNTNUM;
END;
USETI(CHO[2],POS%128 + 1);
FOR I←(POS MOD 128) STEP -1 UNTIL 1 DO WORDIN(CHO[2]);
RASW←WORDIN(CHO[2]);
IF (RASW LSH -27)=0 THEN
RASW←RASW LOR ((MEMORY[FNTAR[FNTNUM]+CHR] LSH -18) LSH 27);
BEGIN "READ"
SAFE INTEGER ARRAY CHAR[-1:(RASW LAND '777777)-2];
CHAR[-1]←RASW;
ARRYIN(CHO[2],CHAR[0],(RASW LAND '777777)-1);
IF CBUF[1]≥2*(RASW LAND '777777) THEN
BEGIN
MEMORY[CBUF[0]]←RASW;
ARRBLT(MEMORY[CBUF[0]+1],CHAR[0],(RASW LAND '777777)-1);
MEMORY[FNTAR[FNTNUM]+CHR]←
(MEMORY[FNTAR[FNTNUM]+CHR] LAND '777777000000) LOR
((-CBUF[0]) LAND '777777);
CBUF[0]←CBUF[0]+(RASW LAND '777777);
CBUF[1]←CBUF[1]-(RASW LAND '777777);
END
ELSE
OUTSTR("!");
L1X1(PIC,
YLO+((CHAR[0] LSH 9) LSH -27),XLO-(CHAR[0] ASH -27),
CHAR[-1]);
END "READ";
END "READA"
ELSE
L1X1(PIC,
YLO+((MEMORY[1-POS] LSH 9) LSH -27),XLO-(MEMORY[1-POS] ASH -27),
MEMORY[-POS]);
END "REAL";
END "CHR1X1";
INTERNAL PROCEDURE CHR6X4(INTEGER FNTNUM, CHR; REFERENCE INTEGER PIC;
INTEGER YLO,XLO);
BEGIN "CHR6X4"
EXTERNAL PROCEDURE L6X4(REFERENCE INTEGER PIC; INTEGER YLO,XLO;
REFERENCE INTEGER CHAR);
INTEGER ICHAN,FOO,POS,I,J,RASW;
YLO←YLO-MEMORY[FNTAR[FNTNUM]+FNTBAS];
IF (MEMORY[FNTAR[FNTNUM]+CHR]) LAND '777777≠0 ∧
YLO≥0 ∧ YLO<MEMORY[LOCATION(PIC)+PCLN]*4 THEN
BEGIN "REAL"
POS←MEMORY[FNTAR[FNTNUM]+CHR] LAND '777777;
POS←(POS LSH 18) ASH -18;
IF POS>0 THEN
BEGIN "READA"
IF CHO[1]≠FNTNUM THEN
BEGIN
IF CHO[2]≠-1 THEN RELEASE(CHO[2]);
PRSFIL(FNTNAM[FNTNUM]);
CHO[2]←GETCHAN;
FOO←1;
OPEN(CHO[2],DEVPRS,'10,19,0,FOO,FOO,FOO);
LOOKUP(CHO[2],FILPRS,FOO);
CHO[1]←FNTNUM;
END;
USETI(CHO[2],POS%128 + 1);
FOR I←1 STEP 1 UNTIL (POS MOD 128) DO WORDIN(CHO[2]);
RASW←WORDIN(CHO[2]);
IF (RASW LSH -27)=0 THEN
RASW←RASW LOR ((MEMORY[FNTAR[FNTNUM]+CHR] LSH -18) LSH 27);
BEGIN "READ"
SAFE INTEGER ARRAY CHAR[-1:(RASW LAND '777777)-2];
CHAR[-1]←RASW;
ARRYIN(CHO[2],CHAR[0],(RASW LAND '777777)-1);
IF CBUF[1]≥2*(RASW LAND '777777) THEN
BEGIN
MEMORY[CBUF[0]]←RASW;
ARRBLT(MEMORY[CBUF[0]+1],CHAR[0],(RASW LAND '777777)-1);
MEMORY[FNTAR[FNTNUM]+CHR]←
(MEMORY[FNTAR[FNTNUM]+CHR] LAND '777777000000) LOR
((-CBUF[0]) LAND '777777);
CBUF[0]←CBUF[0]+(RASW LAND '777777);
CBUF[1]←CBUF[1]-(RASW LAND '777777);
END
ELSE
OUTSTR("!");
L6X4(PIC,
YLO+((CHAR[0] LSH 9) LSH -27),XLO-(CHAR[0] ASH -27),
CHAR[-1]);
END "READ";
END "READA"
ELSE
L6X4(PIC,
YLO+((MEMORY[1-POS] LSH 9) LSH -27),XLO-(MEMORY[1-POS] ASH -27),
MEMORY[-POS]);
END "REAL";
END "CHR6X4";
INTERNAL PROCEDURE CHR3Y4(INTEGER FNTNUM, CHR; REFERENCE INTEGER PIC;
INTEGER YLO,XLO);
BEGIN "CHR3Y4"
EXTERNAL PROCEDURE L3Y4(REFERENCE INTEGER PIC; INTEGER YLO,XLO;
REFERENCE INTEGER CHAR);
INTEGER ICHAN,FOO,POS,I,J,RASW;
YLO←YLO-MEMORY[FNTAR[FNTNUM]+FNTBAS];
IF (MEMORY[FNTAR[FNTNUM]+CHR]) LAND '777777≠0 ∧
YLO≥0 ∧ YLO<MEMORY[LOCATION(PIC)+LNBY]*4 THEN
BEGIN "REAL"
POS←MEMORY[FNTAR[FNTNUM]+CHR] LAND '777777;
POS←(POS LSH 18) ASH -18;
IF POS>0 THEN
BEGIN "READA"
IF CHO[1]≠FNTNUM THEN
BEGIN
IF CHO[2]≠-1 THEN RELEASE(CHO[2]);
PRSFIL(FNTNAM[FNTNUM]);
CHO[2]←GETCHAN;
FOO←1;
OPEN(CHO[2],DEVPRS,'10,19,0,FOO,FOO,FOO);
LOOKUP(CHO[2],FILPRS,FOO);
CHO[1]←FNTNUM;
END;
USETI(CHO[2],POS%128 + 1);
FOR I←1 STEP 1 UNTIL (POS MOD 128) DO WORDIN(CHO[2]);
RASW←WORDIN(CHO[2]);
IF (RASW LSH -27)=0 THEN
RASW←RASW LOR ((MEMORY[FNTAR[FNTNUM]+CHR] LSH -18) LSH 27);
BEGIN "READ"
SAFE INTEGER ARRAY CHAR[-1:(RASW LAND '777777)-2];
CHAR[-1]←RASW;
ARRYIN(CHO[2],CHAR[0],(RASW LAND '777777)-1);
IF CBUF[1]≥2*(RASW LAND '777777) THEN
BEGIN
MEMORY[CBUF[0]]←RASW;
ARRBLT(MEMORY[CBUF[0]+1],CHAR[0],(RASW LAND '777777)-1);
MEMORY[FNTAR[FNTNUM]+CHR]←
(MEMORY[FNTAR[FNTNUM]+CHR] LAND '777777000000) LOR
((-CBUF[0]) LAND '777777);
CBUF[0]←CBUF[0]+(RASW LAND '777777);
CBUF[1]←CBUF[1]-(RASW LAND '777777);
END
ELSE
OUTSTR("!");
L3Y4(PIC,
YLO+((CHAR[0] LSH 9) LSH -27),XLO-(CHAR[0] ASH -27),
CHAR[-1]);
END "READ";
END "READA"
ELSE
L3Y4(PIC,
YLO+((MEMORY[1-POS] LSH 9) LSH -27),XLO-(MEMORY[1-POS] ASH -27),
MEMORY[-POS]);
END "REAL";
END "CHR3Y4";
INTERNAL PROCEDURE CHRPED(INTEGER FNTNUM, CHR; REFERENCE INTEGER PIC;
INTEGER YLO,XLO, YCOMP(1),XCOMP(1));
BEGIN "CHRPED"
INTEGER ICHAN,FOO,POS,I,J,RASW,PHI;
PHI←MEMORY[LOCATION(PIC)+PCLN];
YLO←YLO-MEMORY[FNTAR[FNTNUM]+FNTBAS];
IF (MEMORY[FNTAR[FNTNUM]+CHR]) LAND '777777≠0 ∧
YLO+MEMORY[FNTAR[FNTNUM]+FNTHIG]≥0 ∧ YLO≤MEMORY[LOCATION(PIC)+LNBY]*YCOMP THEN
BEGIN "REAL"
POS←MEMORY[FNTAR[FNTNUM]+CHR] LAND '777777;
POS←(POS LSH 18) ASH -18;
IF POS>0 THEN
BEGIN "READA"
IF CHO[1]≠FNTNUM THEN
BEGIN
IF CHO[2]≠-1 THEN RELEASE(CHO[2]);
PRSFIL(FNTNAM[FNTNUM]);
CHO[2]←GETCHAN;
FOO←1;
OPEN(CHO[2],DEVPRS,'10,19,0,FOO,FOO,FOO);
LOOKUP(CHO[2],FILPRS,FOO);
CHO[1]←FNTNUM;
END;
USETI(CHO[2],POS%128 + 1);
FOR I←1 STEP 1 UNTIL (POS MOD 128) DO WORDIN(CHO[2]);
RASW←WORDIN(CHO[2]);
IF (RASW LSH -27)=0 THEN
RASW←RASW LOR ((MEMORY[FNTAR[FNTNUM]+CHR] LSH -18) LSH 27);
BEGIN "READ"
INTEGER NROW,PTQ;
INTEGER ARRAY CHAR[0:(RASW LAND '777777)-2];
ARRYIN(CHO[2],CHAR[0],(RASW LAND '777777)-1);
IF CBUF[1]≥2*(RASW LAND '777777) THEN
BEGIN
MEMORY[CBUF[0]]←RASW;
ARRBLT(MEMORY[CBUF[0]+1],CHAR[0],(RASW LAND '777777)-1);
MEMORY[FNTAR[FNTNUM]+CHR]←
(MEMORY[FNTAR[FNTNUM]+CHR] LAND '777777000000) LOR
((-CBUF[0]) LAND '777777);
CBUF[0]←CBUF[0]+(RASW LAND '777777);
CBUF[1]←CBUF[1]-(RASW LAND '777777);
END
ELSE
OUTSTR("!");
RASW←RASW LSH -27;
IF RASW=0 THEN RASW←MEMORY[FNTAR[FNTNUM]+CHR] LSH -18;
XLO←XLO-(CHAR[0] ASH -27);
YLO←YLO+((CHAR[0] LSH 9) LSH -27);
NROW←CHAR[0] LAND '777777;
IF NROW*RASW>0 THEN PTQ←POINT(1,CHAR[1],-1);
FOR I←0 STEP 1 UNTIL NROW-1 DO
BEGIN "PACK"
INTEGER YPA;
YPA←(YLO+I)%YCOMP;
FOR J←0 STEP 1 UNTIL RASW-1 DO IF ILDB(PTQ) THEN
ADDEL(PIC,PHI-(XLO+J)%XCOMP,YPA,1);
IF (PTQ LSH -30) < RASW THEN PTQ←PTQ LAND '7777777777;
END "PACK";
END "READ";
END "READA"
ELSE
BEGIN "BUFA"
POS←-POS;
RASW←MEMORY[POS];
BEGIN "READ"
INTEGER NROW,PTQ;
RASW←RASW LSH -27;
IF RASW=0 THEN RASW←MEMORY[FNTAR[FNTNUM]+CHR] LSH -18;
XLO←XLO-(MEMORY[POS+1] ASH -27);
YLO←YLO+((MEMORY[POS+1] LSH 9) LSH -27);
NROW←MEMORY[POS+1] LAND '777777;
IF NROW*RASW>0 THEN PTQ←POINT(1,MEMORY[POS+2],-1);
FOR I←0 STEP 1 UNTIL NROW-1 DO
BEGIN "PACK"
INTEGER YPA;
YPA←(YLO+I)%YCOMP;
FOR J←0 STEP 1 UNTIL RASW-1 DO IF ILDB(PTQ) THEN
ADDEL(PIC,PHI-(XLO+J)%XCOMP,YPA,1);
IF (PTQ LSH -30) < RASW THEN PTQ←PTQ LAND '7777777777;
END "PACK";
END "READ";
END "BUFA";
END "REAL";
END "CHRPED";
END "FNTSAI";